let pageNumber = 1;
let pageSize = 200;
let pageTotal = 0;
let device_path = "";
let list = [];
let apiHost = Config.API_URL//接口地址
//let selectedSidebarPath = ''; // 定义全局变量存储侧边栏选中路径

// 函数：获取URL参数并返回一个对象
function getUrlParameters() {
    const params = {};
    const urlParams = new URLSearchParams(window.location.search);

    urlParams.forEach((value, key) => {
        params[key] = value;
    });
    return params;
}

// 立即调用函数并存储结果
const urlParams = getUrlParameters();


//在 jQuery 中，$(function () {});是一种简写形式，它等同于$(document).ready(function () {});
//文档加载完成后执行其中的代码
$(function () {
    // Enter key triggers displayFileList function
    $('#filePath').on('keypress', function (e) {
        if (e.key === 'Enter') {
            // 输入框内容变化时也更新URL参数
            updateUrlPath($(this).val(), 1);
            displayFileList(pageNumber, pageSize);
        }
    });

    let val = urlParams['path']
    if(val && val === '/') val=''
    $('#filePath').val(val)

    // 读取分页参数，如果没有则默认为第一页
    let initialPage = parseInt(urlParams['page']) || 1;
    if (initialPage < 1) initialPage = 1;
    pageNumber = initialPage;

    displayFileList(pageNumber,pageSize);
    //openPage(1)
    loadSidebarPaths(); // 新增：加载侧边栏路径
});

/**
 * 更新URL中的路径参数
 * @param {string} path - 要设置的路径
 * @param {number} page - 要设置的页码
 */
function updateUrlPath(path, page = 1) {
    const url = new URL(window.location);
    
    if (path && path !== '/') {
        url.searchParams.set('path', path);
    } else {
        url.searchParams.delete('path');
    }

    // 处理分页参数
    if (page && page > 1) {
        url.searchParams.set('page', page);
    } else {
        url.searchParams.delete('page');
    }

    // 使用replaceState而不是pushState，避免产生历史记录
    window.history.replaceState({}, '', url);
}

// 初始化侧边栏数据
async function loadSidebarPaths() {
    try {
        const response = await fetch(`${apiHost}/api/getAllPaths`);
        const data = await response.json();
        if (data.code === 200) {
            const pathList = document.getElementById('pathList');
            pathList.innerHTML = '';

            const paths = data.data;
            const chineseNames = {
                "appCachePath": "应用缓存路径",
                "appFilesPath": "应用文件路径",
                "dcimPath": "相机存储路径",
                "documentsPath": "文档路径",
                "downloadsPath": "下载路径",
                "externalStoragePath": "外部存储路径",
                "internalStoragePath": "内部存储路径",
                "moviesPath": "视频路径",
                "musicPath": "音乐路径",
                "picturesPath": "图片路径"
            };
            Object.keys(paths).forEach(key => {
                const item = document.createElement('li');
                item.className = 'list-group-item';
                item.dataset.path = paths[key];
                item.textContent = chineseNames[key] || key; // 使用中文名称，没有则用原字段名
                item.addEventListener('click', () => {
                    selectPath(paths[key]);
                });
                pathList.appendChild(item);
            });
        }
    } catch (error) {
        console.error('加载路径列表失败:', error);
    }
}

//侧边栏选择事件
function selectPath(sidebarPath) {
    //selectedSidebarPath = sidebarPath; // 将选中路径赋值给全局变量
    $('.list-group-item').removeClass('active');
    $(`[data-path="${sidebarPath}"]`).addClass('active');

    // 修复：将选中的绝对路径填充到路径文本框
    $('#filePath').val(sidebarPath);

    // 更新URL参数（选择侧边栏路径时重置到第一页）
    updateUrlPath(sidebarPath, 1);

    displayFileList(1, pageSize);
}

// 获取文件列表
async function getFileList(page, pageSize, path) {
    const response = await fetch(`${apiHost}/api/file/v2/file-db-list?path=${path}&page=${page}&pageSize=${pageSize}`);
    const data = await response.json();
    return data;
}

// 显示文件列表
async function displayFileList(page,pageSize) {
    const fileListDiv = document.getElementById('fileList');
    fileListDiv.innerHTML = ''; // 清空内容
    const filePathInput = $('#filePath').val().trim();
    const path = filePathInput;

    // 更新URL参数（添加分页信息）
    updateUrlPath(path, page);

    const respBody = await getFileList(page, pageSize, path);
    if (respBody.code !== 200) return;
    const fileListData = respBody.data
    let fileListElement;

    list = fileListData.list;
    pageNumber=page;
    pageTotal=fileListData.total;
    device_path=fileListData.path;
    setPage(page, fileListData.total)

    // 检查目录是否为空
    if (list.length === 0) {
        // 显示空目录提示
        const emptyMessage = document.createElement('div');
        //emptyMessage.classList.add('empty-directory-message');
        emptyMessage.innerHTML = `
            <div class="text-center mt-5">
                <i class="bi bi-folder-x" style="font-size: 4rem; color: #6c757d;"></i>
                <h4 class="mt-3 text-muted">目录为空</h4>
                <p class="text-muted">当前目录没有文件或文件夹</p>
            </div>
        `;
        fileListDiv.appendChild(emptyMessage);
        return;
    }

    if (list.length === 0 || (fileListData.page === 1 && list.length === pageTotal)) {
        // 隐藏分页栏
        document.getElementById('pageBar').style.display = 'none';
    } else {
        // 显示分页栏
        document.getElementById('pageBar').style.display = '';
    }

    const dirList = document.createElement('ul');
    dirList.classList.add('ulfile');
    fileListDiv.appendChild(dirList);


    let currentFileDate = '';
    list.forEach(item => {
        const listItem = document.createElement('li');
        listItem.classList.add('file-item'); // 为所有文件项添加基础样式

        const fileUrl = `${apiHost}/api/file/v2/get-file/?path=${item.fullName}`; // 直接使用文件的 URL
        item.fileUrl = fileUrl
        item.streamFileUrl = `${apiHost}/api/file/v2/stream-file/?path=${item.fullName}`;
        item.fullPath = `${item.fullName}`
        const creationTime = item.creationTime;
        const formattedDate = creationTime.slice(0, 10);

        if (item.isFile && currentFileDate !== formattedDate) {
            currentFileDate = formattedDate;

            const dividingDate = document.createElement('div')
            dividingDate.innerHTML = formattedDate
            dividingDate.classList.add('dividingDate');
            fileListDiv.appendChild(dividingDate);

            fileListElement = document.createElement('ul');
            fileListElement.classList.add('ulfile');
            fileListDiv.appendChild(fileListElement);
        }

        // 创建图标容器
        const iconContainer = document.createElement('div');
        iconContainer.classList.add('file-icon');

        // 创建文件名元素
        const fileNameElement = document.createElement('div');
        fileNameElement.classList.add('file-name');
        fileNameElement.textContent = item.name;

        // 根据文件类型设置图标
        if (item.isFile) {
            if (item.name.match(/\.(jpg|jpeg|png|gif|webp|bmp)$/i)) {
                // 图片文件 - 显示缩略图
                const encodedPath = encodeURIComponent(`${item.fullName}`);
                const img = document.createElement('img');
                img.src = `${apiHost}/api/file/v2/thumbnail/?path=${encodedPath}`;
                img.classList.add('file-thumbnail');
                iconContainer.appendChild(img);
            } else if (item.name.match(/\.(mp4|webm|ogg|mov|avi)$/i)) {
                // 视频文件 - 显示缩略图
                const encodedPath = encodeURIComponent(`${item.fullName}`);
                const img = document.createElement('img');
                img.src = `${apiHost}/api/file/v2/thumbnail/?path=${encodedPath}`;
                img.classList.add('file-thumbnail');
                iconContainer.appendChild(img);
                //使用视频图标
                //iconContainer.innerHTML = '<i class="fas fa-file-video"></i>';
                //iconContainer.innerHTML = '<i class="bi bi-file-earmark-play"></i>';
            // } else if (item.name.match(/\.(mp3|wav|ogg|flac)$/i)) {
            //     // 音频文件
            //     iconContainer.innerHTML = '<i class="fas fa-file-audio"></i>';
            // } else if (item.name.match(/\.(pdf)$/i)) {
            //     // PDF文件
            //     iconContainer.innerHTML = '<i class="fas fa-file-pdf"></i>';
            // } else if (item.name.match(/\.(doc|docx)$/i)) {
            //     // Word文档
            //     iconContainer.innerHTML = '<i class="fas fa-file-word"></i>';
            // } else if (item.name.match(/\.(xls|xlsx)$/i)) {
            //     // Excel文档
            //     iconContainer.innerHTML = '<i class="fas fa-file-excel"></i>';
            // } else if (item.name.match(/\.(ppt|pptx)$/i)) {
            //     // PowerPoint文档
            //     iconContainer.innerHTML = '<i class="fas fa-file-powerpoint"></i>';
            // } else if (item.name.match(/\.(zip|rar|7z|tar|gz)$/i)) {
            //     // 压缩文件
            //     iconContainer.innerHTML = '<i class="fas fa-file-archive"></i>';
            // } else if (item.name.match(/\.(txt|md|ini|conf|log)$/i)) {
            //     // 文本文件
            //     iconContainer.innerHTML = '<i class="fas fa-file-alt"></i>';
            // } else {
            //     // 其他文件
            //     iconContainer.innerHTML = '<i class="fas fa-file"></i>';
            // }
            } else if (item.name.match(/\.(mp3|wav|ogg|flac)$/i)) {
                // 音频文件
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-music"></i>';
            } else if (item.name.match(/\.(pdf)$/i)) {
                // PDF文件
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-pdf"></i>';
            } else if (item.name.match(/\.(doc|docx)$/i)) {
                // Word文档
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-word"></i>';
            } else if (item.name.match(/\.(xls|xlsx)$/i)) {
                // Excel文档
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-excel"></i>';
            } else if (item.name.match(/\.(ppt|pptx)$/i)) {
                // PowerPoint文档
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-ppt"></i>';
            } else if (item.name.match(/\.(zip|rar|7z|tar|gz)$/i)) {
                // 压缩文件
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-zip"></i>';
            } else if (item.name.match(/\.(txt|md|ini|conf|log)$/i)) {
                // 文本文件
                iconContainer.innerHTML = '<i class="bi bi-file-earmark-text"></i>';
            } else {
                // 其他文件
                iconContainer.innerHTML = '<i class="bi bi-file-earmark"></i>';
            }
        } else {
            // 目录 - 使用文件夹图标
            // iconContainer.innerHTML = '<i class="fas fa-folder"></i>';
            iconContainer.innerHTML = '<i class="bi bi-folder"></i>';
            listItem.classList.add('directory');
        }

        // 组装列表项
        listItem.appendChild(iconContainer);
        listItem.appendChild(fileNameElement);

        // 添加事件监听器
        if (item.isFile) {
            if (item.name.match(/\.(jpg|jpeg|png|gif)$/i)) {
                listItem.addEventListener('click', () => openImg(item));
            } else if (item.name.match(/\.(mp4|webm|ogg)$/i)) {
                listItem.addEventListener('click', () => openVideo(item));
            } else {
                listItem.addEventListener('click', () => openFile(item));
            }

            // 右键菜单
            listItem.addEventListener('contextmenu', (e) => {
                e.preventDefault();
                showContextMenu(e, item);
                return false;
            });
        } else {
            listItem.addEventListener('dblclick', () => openDirectory(item));
        }

        // 添加到对应的列表
        if (item.isFile) {
            // 添加到文件列表
            fileListElement.appendChild(listItem);
        } else {
            // 添加到目录列表
            dirList.appendChild(listItem);
        }
    });
}


// 双击打开文件夹
function openDirectory(directoryItem) {
    const newPath = `${directoryItem.fullName}`;  // 拼接新的路径
    $('#filePath').val(newPath);  // 更新路径输入框

    // 更新URL参数
    updateUrlPath(newPath, 1);

    displayFileList(1, pageSize);  // 刷新文件列表
}


//打开分页
function openPage(page) {
    if ("上一页" == page) {
        pageNumber = Number(pageNumber) - 1;
        pageNumber = Math.max(pageNumber, 1)
    } else if ("下一页" == page) {
        pageNumber = Number(pageNumber) + 1;
        pageNumber = Math.min(pageNumber, Math.ceil(pageTotal / pageSize))
    } else {
        pageNumber = Number(page)
    }
    displayFileList(pageNumber,pageSize)
}

//设置分页栏
function setPage(pageNumber, total) {
    var all = "<li class=\"page-item\"><a class=\"page-link\" onclick=\"openPage('上一页')\">上一页</a></li>\n";
    for (let index = 1; index <= Math.ceil(total / pageSize); index++) {
        if (pageNumber == index) {
            all = all + "<li class=\"page-item active\"><a class=\"page-link\" onclick=\"openPage('" + index + "')\">" + index + "</a></li>\n";
        } else {
            all = all + "<li class=\"page-item\"><a class=\"page-link\" onclick=\"openPage('" + index + "')\">" + index + "</a></li>\n";
        }
    }
    all = all + "<li class=\"page-item\"><a class=\"page-link\" onclick=\"openPage('下一页')\">下一页</a></li>";
    all = all + "<li class=\"page-item\"><span class=\"page-link\" >" + total + "</span></li>";
    $("#pageBar").html(all)
}


// 返回上一级目录
function goUpDirectory() {
    const currentPath = $('#filePath').val() || "/";
    const pathParts = currentPath.split('/').filter(Boolean);  // 过滤掉空值
    if (pathParts.length > 0) {
        pathParts.pop();  // 去掉最后一个部分
        let newPath = '/' + pathParts.join('/');  // 拼接新的路径
        if (newPath === '/') newPath = ''
        $('#filePath').val(newPath);  // 更新路径输入框

        // 更新URL参数
        updateUrlPath(newPath, 1);

        displayFileList(1, pageSize);  // 刷新文件列表
    }
}


// 右键菜单相关逻辑
let currentContextItem = null; // 存储当前右键操作的item

// 显示右键菜单
function showContextMenu(e, item) {
    e.preventDefault(); // 阻止默认右键菜单
    currentContextItem = item;

    // 设置菜单位置
    $('#contextMenu')
        .css({
            display: 'block',
            left: e.pageX + 'px',
            top: e.pageY + 'px'
        });
}

// 隐藏右键菜单
function hideContextMenu() {
    $('#contextMenu').hide();
}

// 绑定事件
$(document).on('contextmenu', '.file-item', function (e) {
    const item = list.find(i => i.name === $(this).find('img').attr('src').split('/').pop());
    if (item) showContextMenu(e, item);
});

$(document).on('click', hideContextMenu); // 点击页面其他区域隐藏菜单

// 菜单操作函数
function handleDownload() {
    if (!currentContextItem) return;
    const link = document.createElement('a');
    link.href = currentContextItem.fileUrl;
    link.download = currentContextItem.name;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

function handleViewOriginal() {
    if (!currentContextItem) return;
    openImg(currentContextItem);
}

function handleOpenLink() {
    if (!currentContextItem) return;
    window.open(currentContextItem.fileUrl, '_blank');
}

function handleDelete() {
    if (!currentContextItem) return;
    if (confirm(`确定要删除 ${currentContextItem.name} 吗？`)) {
        fetch(`${apiHost}/api/file/v2/delete?path=${currentContextItem.fullPath}`, {
            method: 'DELETE'
        }).then(() => {
            //displayPhotoAlbumList(pageNumber, pageSize); // 刷新列表
        });
    }
}
